﻿// -------------------------------------------------------------------------
//    @FileName         :    NFWelfareConf.cpp
//    @Author           :    gaoyi
//    @Date             :    2025-06-30
//    @Email			:    445267987@qq.com
//    @Module           :    NFWelfareConf
//
// -------------------------------------------------------------------------

#include "NFWelfareConf.h"

NFWelfareConf::NFWelfareConf()
{
    // 根据共享内存创建模式选择不同的初始化方式
    if (EN_OBJ_MODE_INIT == NFShmMgr::Instance()->GetCreateMode())
    {
        CreateInit();  // 首次创建时的初始化
    }
    else
    {
        ResumeInit();  // 从共享内存恢复时的初始化
    }
}

NFWelfareConf::~NFWelfareConf()
{
    // 析构函数，共享内存对象无需特殊清理
}

int NFWelfareConf::CreateInit()
{
    // 创建模式初始化，哈希表会自动初始化
    return 0;
}

int NFWelfareConf::ResumeInit()
{
    // 恢复模式初始化，哈希表会自动恢复
    return 0;
}

const NFWelfareConfOne* NFWelfareConf::FindConf(uint64_t welfareId) const
{
    // 在哈希表中查找指定的福利配置
    auto iter = m_welfareConf.find(welfareId);
    if (iter != m_welfareConf.end())
    {
        return &iter->second;  // 返回找到的配置对象
    }
    return nullptr;  // 未找到返回空指针
}

NFWelfareConfOne* NFWelfareConf::FindConf(uint64_t welfareId)
{
    // 在哈希表中查找指定的福利配置（可修改版本）
    auto iter = m_welfareConf.find(welfareId);
    if (iter != m_welfareConf.end())
    {
        return &iter->second;  // 返回找到的配置对象
    }
    return nullptr;  // 未找到返回空指针
}

NFWelfareConfOne* NFWelfareConf::AllocConf(uint64_t welfareId)
{
    // 首先检查是否已经存在该福利配置
    auto pConfOne = FindConf(welfareId);
    if (pConfOne != nullptr)
    {
        LOG_ERR(0, -1, "welfareId:{} exist, not need alloc conf", welfareId);
        return pConfOne;  // 如果已存在，返回现有配置
    }

    // 检查哈希表是否已满
    if (m_welfareConf.full())
    {
        LOG_ERR(0, -1, "the space not enough, full, welfareId:{} alloc conf failed", welfareId);
        return nullptr;  // 空间不足，分配失败
    }

    // 分配新的配置对象并返回引用
    return &m_welfareConf[welfareId];
}

int NFWelfareConf::Reset()
{
    // 清空所有福利配置
    m_welfareConf.clear();
    return 0;
}

NFWelfareConf::NFWelfareConf(const NFWelfareConf& stConf)
{
    m_welfareConf = stConf.m_welfareConf;
}

NFWelfareConf& NFWelfareConf::operator=(const NFWelfareConf& stConf)
{
    if (this != &stConf)
    {
        m_welfareConf = stConf.m_welfareConf;
    }
    return *this;
}
